ECSの実践的コンテナ運用基礎を凝縮された30分ウェビナーで学ぶ
みなさん、AWS INNOVATE視聴しましたか?
AWS Innovate オンラインカンファレンス | 2020 年 3 月 10 日 (火) 〜 4 月 17 日 (金) 開催
AWSの中の人が、幅広い分野で最新のクラウド事情を解説してくれるオンラインカンファレンスです。コロナウィルスの影響でなかなかリアルなイベントに参加する機会が難しくなりましたが、こういったオンラインで参加できるように設計されたカンファレンスはこの時期非常にありがたいですね。
いろんな分野がセッションあるのですが、自分は「実践的 AWS コンテナ運用ガイド -モニタリング、ロギング、デプロイ、スケーリングの実現方法-」というハマーンさんのセッションを聴講したので、その様子をお届けします。ECSの運用に関わるベストプラクティスがギュッと凝縮されたウェビナーだったので、そのあたり気になる方は、参考になると思います!
(祭) ∧ ∧ Y ( ゚Д゚) Φ[_ソ__y_l〉 コンテナ運用マツリダワッショイ |_|_| し'´J
「実践的 AWS コンテナ運用ガイド -モニタリング、ロギング、デプロイ、スケーリングの実現方法-」
セッション概要
アプリケーションのコンテナ化、オーケストレーションツールの Production 環境での活用を考えているものの、コンテナ化されたアプリケーションをどのように運用をしたらいいのか?モニタリング、ロギング、デプロイ、スケーリングはどのように考えればいいのか?といった課題やお悩みをよく伺います。
本セッションでは、Amazon ECS を活用したコンテナアプリケーションの運用上のオーバーヘッドを低減するための実践的なパターンや Tips を紹介させていただきます。
スピーカー
アマゾン ウェブサービス ジャパン 技術統括本部 ソリューションアーキテクト 濵 真一さん
本セッションについて
- セッションの対象者
- AWS 上でコンテナ化されたアプリケーションを運用している、もしくはこれから構築・運用されるエンジニア・ アーキテクトの方
- コンテナ化されたアプリケーションを作っているけど、運用方法に不安を抱えている方
- セッションのゴール
- Amazon ECSでのコンテナアプリケーションの運用上の負担を低減するための手法を理解する
- 前提条件
- Amazon VPC、Amazon EC2、Amazon S3 などのAWS 基礎サービス
- コンテナおよびDockerについて(お先に「[S-11] ところで、コンテナ化ってどうやればいいの?」をご覧いただ くとより理解が深まります。)
アジェンダ
- イントロダクション
- アプリケーションをコンテナ化する背景
- ECS上にデプロイされた、あるアプリケーションのシナリオ
- コンテナ化アプリケーションの運用における課題とその解決手法
- まとめ
アプリケーションをコンテナ化する背景
なぜ、いま、コンテナ化が必要とされているのか?
- Run Anywhere
- 複数環境に渡る一貫した実行可能性
- Portability
- 可搬性の高さ
- コンテナイメージの作成 (build)、レジストリ、アップロード (push)、ダウン ロード (pull) に代表される、可搬性の高さを支えるエコシステム
- Isolated processes
- コンテナによるプロセスレベルのリソースアイソレーション、それによるCPU やメモリに代表されるリソースの柔軟な割り当て、高速な起動と停止
これらの特徴により、CI/CDにる自動化に相性がよかったり、デリバリ速度の向上が見込める。また、リソース集積率を高めることによる仮想マシンコストの削減が期待できる。
ではなぜ、オーケストレーションツールが必要とされているのか?もともと、コンテナ技術自体の機能性のスコープは単一ノードにおけるライフサイクル管理でした。ただ、プロダクション環境で複数のノードにまたがる複数のコンテナを扱う場合には、以下の機能が必要とされます。
- オーケストレーションツール+αで実現される機能性の例
- 複数サーバにまたがるコンテナのレプリケーションやスケジューリング
- クラッシュしたコンテナの自動再配置 (オートヒーリング)
- 宣言的デプロイメント
- オートスケーリング
- 秘密情報管理
- メトリクス・ログ収集
- etc.
これらを実現するのがECSです。
ECSは様々な機能がありますが、大きな特徴としては、「他のAWSサービスとの連携」「オートスケーリング」「ログ/メトリクス/イベント」が挙げられます。
ECS上にデプロイされた、あるアプリケーションのシナリオ
ここで、モデルケースとしてECS上のアプリケーションのシナリオをご紹介します。
- EC2 上で動いていた WEB アプリケーション をデリバリ速度の向上を目指し、コンテナ化
- コンテナを使ったアプリケーションの運用は 初めて
- Application Load Balancer、Amazon ECS/Fargate、Amazon RDS というアーキ テクチャ
- マネージメントコンソールから ECS にデプロ イし動作することまでは確認済み
運用時には、これだけの事を考えないといけません。
これらコンテナ化アプリケーションの運用における課題と解決手法について、これから紹介していきます。
- 課題1:より詳細なモニタリング
- 課題2:ログの柔軟なルーティング
- 課題3:ECS へのデプロイの自動化について
- 課題4:タスク数のオートスケーリング の設定
課題1:より詳細なモニタリング
CloudWatchのデフォルトのメトリクスでは、サービス全体の平均メトリクスは取得できていたが、各個別タスクおよびコンテナ単位でのメトリクスが取得できなかった。例えば、1つのタスクにNginxコンテナとApplicationコンテナが存在しているとき、それぞれのリソース利用状況を把握することができなかった。
それが、Container Insightsを使うことで、タスク、コンテナ単位でのリソースモニタリングが可能なので、コンテナ単位でのリソース配分を実施することが可能となる。
課題2:ログの柔軟なルーティング
ログの種類によって、ログの転送先をCloudWatch LogsやS3に柔軟に転送してコスト最適化をしたい。
そこで、ログドライバーにFireLensを利用する。FluentdやFluent Bitのコンテナがサイドカーとして実行され、設定により柔軟なログの保存が可能となります。
課題3:ECS へのデプロイの自動化について
ソースコードのビルド、イメージのビルドからのアップロード、タスク定義更新、サービスの更新を手動でやるのは手間がかかるし、人手でやるのはヒューマンエラーが起こり得る。
解決アプローチとして、可能な限り全てを自動化する。自動化されたデプロイにより開発速度が向上され、人依存ではなくコードに依存したデプロイにより、組織拡大への対応が容易となる。
具体的な、AWSのサービスに置き換えたデプロイメントのコンポーネントは以下の通り。これは一番基本的な例となります。
実際のチュートリアルはこちらを参考にしてみてください。
チュートリアル: Secrets Manager シークレットを使用した機密データの指定 - Amazon Elastic Container Service
課題4:タスク数のオートスケーリング の設定
アプリケーションの特性上、日や時間によってアクセスにばらつきがあり、ECSサービスのAuto Scalingを設定する。大きくは次の2つの手法がある。
- ステップスケーリングポリシー
- 推奨:ターゲットトラッキングポリシー
メトリクスに対してターゲットとなる値を指定するだけで、設定が完了する非常にわかりやすいもの。ターゲットの値をメトリクスが超えた場合、自動的に対象サービスのタスク数が増えます。
利用可能なメトリクス。
- ECSServiceAverageCPUUtilization
- ECSServiceAverageMemoryUtilization
- ALBRequestCountPerTarget
まとめ
様々な課題を解決することで、こうなりました。
AWS上で、ECS、Fargateを活用する場合、以下の観点でAWSの周辺サービスをフル活用することで、効率的かつ安定性にすぐれた運用が可能となる。
- モニタリング
- ロギング
- デプロイ
- スケーリング
濱田感想「ECSの運用に関わるあるあるがぎゅっと凝縮された素晴らしいウェビナー」
AWS Innovateでリアルタイムで、このウェビナー聴講していたんですが、最初のユースケースからそれらを解決していくアプローチが非常に簡潔かつわかりやすく、30分という短い時間の中で、ギュッと凝縮してECSの運用について、そのキモを話されていたのが印象的でした。
ECS使って実際にコンテナワークロードを運用していくときに考えるべきことがまとまっているので、是非実際のハマーンさんの動画も見ていただいて、理解を深めて頂ければと思います。
AWS INNOVATEは、2020年4月17日(金)までいつでも視聴可能とのことです。
AWS Innovate オンラインカンファレンス | 2020 年 3 月 10 日 (火) 〜 4 月 17 日 (金) 開催
それでは、今日はこのへんで。濱田(@hamako9999)でした。